/**
 * 四海兄弟工作小组，群号:160517807
 * @author 乔继承
 * @date 2013年12月15日 上午10:58:17 
 * @version V1.0   
 */
package org.mcpro.common.service.impl;

import java.util.List;

import org.mcpro.common.dao.IDictObjectDAO;
import org.mcpro.common.service.ICommonSerivce;
import org.mcpro.common.util.IDFactory;
import org.mcpro.common.util.ObjectUtil;
import org.mcpro.core.model.DictObject;
import org.mcpro.core.model.DictObject2field;

/**
 * 
 * @author 乔继承
 * @date 2013年12月15日 上午10:58:17
 * 
 */
public class CommonServiceImpl implements ICommonSerivce {
	
	private IDictObjectDAO dictObjectDAO;
	
	/**
	 * 根据dictObject对象的信息创建数据库表，并将数据库表的相关信息记录在dict_object和dict_object2field中<br/>
	 * 
	 * 首先判断数据表是否存在，存在则提示数据库已经存在，不做任何操作，不存在则创建数据库表，<br/>
	 * 创建成功将数据库的信息记录在dict_object和dict_object2field中，否则回滚数据提<br/>
	 * 示用户数据库表创建失败
	 * @param dictObject 
	 * @see org.mcpro.common.service.CommonSerivce#createTable(org.mcpro.core.model.DictObject) 
	 */ 
	@Override
	public void createTable(DictObject dictObject) {
		if(ObjectUtil.isEmpty(dictObject)||ObjectUtil.isEmpty(dictObject.getStableName())){
			return;
		}
		boolean isExist=dictObjectDAO.isTableExist(dictObject.getStableName());
		if(!isExist){
			List<DictObject2field> list=dictObject.getDictObject2fields();
			if(ObjectUtil.isEmpty(list)){
				dictObject.getPrimaryKey();
			}
			int result=dictObjectDAO.createTable(dictObject);
			if(result!=-1){
				dictObjectDAO.saveDictObject(dictObject);
			}
		}
		
	}
	
	public IDictObjectDAO getDictObjectDAO() {
		return dictObjectDAO;
	}
	
	public void setDictObjectDAO(IDictObjectDAO dictObjectDAO) {
		this.dictObjectDAO = dictObjectDAO;
	}

	/**
	 * @return 
	 * @see org.mcpro.common.service.ICommonSerivce#getAll() 
	*/ 
	@Override
	public List<DictObject> getAll() {
		List<DictObject> dictObjectList=getAllDictObjectInfo();
		if(ObjectUtil.isNotEmpty(dictObjectList)){
			DictObject dobj=dictObjectList.get(0);
			List<DictObject2field> list=getAllDictObjectFieldInfoByidObject(dobj.getId());
			dobj.setDictObject2fields(list);
		}
		return dictObjectList;
	}
	

	/**
	 * @return 
	 * @see org.mcpro.common.service.ICommonSerivce#getAllDictObjectInfo() 
	*/ 
	@Override
	public List<DictObject> getAllDictObjectInfo() {
		List<DictObject> listDictObjet=dictObjectDAO.getDictObjectList();
		return listDictObjet;
	}

	/**
	 * @param idObject
	 * @return 
	 * @see org.mcpro.common.service.ICommonSerivce#getAllDictObjectFieldInfo(java.lang.String) 
	*/ 
	@Override
	public List<DictObject2field> getAllDictObjectFieldInfoByidObject(String idObject) {
		List<DictObject2field> listDictObject2field=dictObjectDAO.getDictObject2FieldList(idObject);
		return listDictObject2field;
	}

	/**
	 * @param id
	 * @return 
	 * @see org.mcpro.common.service.ICommonSerivce#getDictObjectFieldById(java.lang.String) 
	*/ 
	@Override
	public DictObject2field getDictObjectFieldById(String id) {
		if(ObjectUtil.isEmpty(id)){
			return null;
		}
		DictObject2field dictObject2field=dictObjectDAO.getDictObject2FieldById(id);
		return dictObject2field;
	}

	/**
	 * @param dictObject2field
	 * @return 
	 * @see org.mcpro.common.service.ICommonSerivce#updateObjectField(org.mcpro.core.model.DictObject2field) 
	*/ 
	@Override
	public List<DictObject2field> updateObjectField(
			DictObject2field dictObject2field) {
		if(ObjectUtil.isEmpty(dictObject2field)||ObjectUtil.isEmpty(dictObject2field.getIdObject())){
			return null;
		}
		List<DictObject> dictObjects=dictObjectDAO.getObjectByProperty(new String[]{"id"}, new String[]{dictObject2field.getIdObject()});
		String tableName=null;
		if(ObjectUtil.isNotEmpty(dictObjects)){
			tableName=dictObjects.get(0).getStableName();
		}
		if(ObjectUtil.isEmpty(tableName)){
			return null;
		}
		//保存字段信息
		String id=dictObject2field.getId();
		int result=-1;
		if(ObjectUtil.isEmpty(id)){//字段为空，数据库表添加字段
			dictObject2field.setId(IDFactory.getNumberid());
			result=dictObjectDAO.addColumnByField(tableName,dictObject2field);
		}else{
			result=dictObjectDAO.alterColumnByField(tableName,dictObject2field);
		}
		List<DictObject2field> dictObject2fields= null;
		if(result!=-1){
			dictObject2fields= dictObjectDAO.saveOrupdateObjectField(dictObject2field);
		}
		return dictObject2fields;
	}


}
